package com.zyf.project.binaryproto.converter.impl.fixed;

import com.zyf.project.binaryproto.converter.FixedValueConverter;
import org.jetbrains.annotations.NotNull;
import utils.binary.BytesUtils;
import utils.binary.impl.BytesSlice;

/**
 * <h1>短整数类型转换器</h1>
 * <p>实现了 {@link FixedValueConverter} 接口</p>
 * <p>处理 short.class 类型的值</p>
 *
 * @author Zhou Yifan
 */
public class Int16ShortConverter implements FixedValueConverter {

    /**
     * 将把固定长度的值序列化到指定的缓冲区
     * <p>
     * 注：实现者应用确保写入的范围不要越界
     *
     * @param value  要序列化的值
     * @param buffer 保存结果的缓冲区
     * @param offset 缓冲区的写入起始位置
     * @return 返回写入的长度
     */
    @Override
    public int encode(Object value, byte[] buffer, int offset) {
        BytesUtils.toBytes((short) value, buffer, offset);
        return 2;
    }

    /**
     * 数据片解码
     *
     * @param dataSlice 数据片
     * @return 解码后的对象
     */
    @Override
    public Object decode(@NotNull BytesSlice dataSlice) {
        return dataSlice.getShort();
    }

    /**
     * 获取值的类型
     *
     * @return Class
     */
    @Override
    public Class<?> getValueType() {
        return short.class;
    }

    /**
     * 返回类型的默认初始值；
     *
     * @return Object
     */
    @Override
    public Object getDefaultValue() {
        return 0;
    }
}
